iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
1
自我挑戰組

到處挖坑,現在該來還(填)願(坑)ㄌ !!!系列 第 7

『 Day 7 』Web Security - A5 . Broken Access Control

  • 分享至 

  • xImage
  •  

A5 - Broken Access Control 無效的存取控管

無效的存取控管(Broken Access Control)」它是由 2013 年的兩項指標所合併的。

  • 「不安全的物件參考(Insecure Direct Object References)」
  • 「不安全的功能控管(Missing Function Level Access Control)」

在「不安全的物件參考(Insecure Direct Object References)」中,攻擊者利用 Web 本身的檔案讀取功能,任意存取系統的某一個檔案或資料;手法類似於 Malicious File Execution,主要目標是竊取系統內的某些檔案。

此漏洞原因在於未對使用者輸入的參數值(此參數值為外部的物件,如檔案)進行驗證所造成的安全漏洞。

在實際上,開發者常被要求寫一種只要使用者輸入相關參數(如文字檔名或圖檔等相關物件)即自動顯示或執行的程式,而我們最直覺的想法便是直接將要顯示的檔名(需包含路徑資訊)當成參數傳進去就好,程式直接根據此參數進行開檔與顯示的動作即可。

假設有一個連結 http://xxx.xxx.xxx.xxx/show.php?file=xxx.txt,程式在接到輸入參數值後,再根據傳進的輸入參數值,直接開檔顯示內容即可,But!!! 如果程式未對輸入的輸入參數進行任何的驗證(例如驗證該檔案只限於某個目錄才可顯示該檔案內容),就有可能出現惡意的使用者利用傳入 ../etc/passwd 類似的字串,其中 .. 為回到上一層,此輸入參數的意思指向 /etc/ 目錄下的 passwd 檔案。倘若程式未對輸入參數進行控管與驗證,當輸入此類的檔名時,就可能將該檔案的內容顯示出來。

舉例

  • 若網頁內容含有以下html語法:

    <select name="language"><option value="EN">English</option></select>
    
  • 程式讀取該html標籤資料的語法為:

    require_once ($_REQUEST['language’]."lang.php");
    
  • 此時若程式寫法沒有限制,允許攻擊者插入特殊字串『../../../../etc/passwd%00』在網址列中:

    http://www.example.com/application?language=../../../../etc/passwd%00
    
  • 使用此種方式則可存取Web系統內的passwd檔案。

錯誤

透過字串比對,檢視參數資料是否有 ../,但我們仍可用其他的方式來跳脫字元檢查,例如:%2e%2e%2f等。

防護建議

  • 處理檔案或敏感性資料時,需嚴格進行監控及身份權限驗證

  • 利用 index 之方式讀取檔案,取代直接讀取檔案名稱


上一篇
『 Day 6 』Web Security - A4 . XML External Entity ( XXE )
下一篇
『 Day 8 』Web Security - A6 . Security Misconfiguration
系列文
到處挖坑,現在該來還(填)願(坑)ㄌ !!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言